package com.roger.homecenterscreen.data.location

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import org.json.JSONObject
import java.util.concurrent.TimeUnit

/**
 * IP定位服务 - 作为GPS定位的备用方案
 * 使用免费的IP定位API（国内可访问）
 */
class IpLocationService {
    
    private val client = OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS)
        .build()
    
    /**
     * 通过IP获取大概位置
     * 使用免费的ipapi.co服务
     */
    suspend fun getLocationByIP(): Result<LocationData> = withContext(Dispatchers.IO) {
        try {
            val request = Request.Builder()
                .url("https://ipapi.co/json/")
                .build()
            
            val response = client.newCall(request).execute()
            
            if (response.isSuccessful) {
                val responseBody = response.body?.string()
                if (responseBody != null) {
                    val json = JSONObject(responseBody)
                    
                    val latitude = json.optDouble("latitude", 0.0)
                    val longitude = json.optDouble("longitude", 0.0)
                    
                    if (latitude != 0.0 && longitude != 0.0) {
                        Result.success(
                            LocationData(
                                latitude = latitude,
                                longitude = longitude
                            )
                        )
                    } else {
                        Result.failure(Exception("IP定位返回无效坐标"))
                    }
                } else {
                    Result.failure(Exception("IP定位响应为空"))
                }
            } else {
                Result.failure(Exception("IP定位请求失败: ${response.code}"))
            }
        } catch (e: Exception) {
            Result.failure(e)
        }
    }
    
    /**
     * 备用IP定位服务
     * 使用ip-api.com服务
     */
    suspend fun getLocationByIPBackup(): Result<LocationData> = withContext(Dispatchers.IO) {
        try {
            val request = Request.Builder()
                .url("http://ip-api.com/json/?fields=status,lat,lon")
                .build()
            
            val response = client.newCall(request).execute()
            
            if (response.isSuccessful) {
                val responseBody = response.body?.string()
                if (responseBody != null) {
                    val json = JSONObject(responseBody)
                    
                    if (json.optString("status") == "success") {
                        val latitude = json.optDouble("lat", 0.0)
                        val longitude = json.optDouble("lon", 0.0)
                        
                        if (latitude != 0.0 && longitude != 0.0) {
                            Result.success(
                                LocationData(
                                    latitude = latitude,
                                    longitude = longitude
                                )
                            )
                        } else {
                            Result.failure(Exception("备用IP定位返回无效坐标"))
                        }
                    } else {
                        Result.failure(Exception("备用IP定位失败"))
                    }
                } else {
                    Result.failure(Exception("备用IP定位响应为空"))
                }
            } else {
                Result.failure(Exception("备用IP定位请求失败: ${response.code}"))
            }
        } catch (e: Exception) {
            Result.failure(e)
        }
    }
} 